package com.jzo2o.market.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.market.enums.CouponStatusEnum;
import com.jzo2o.market.model.domain.Coupon;
import com.jzo2o.market.model.dto.request.CouponPageQueryDTO;
import com.jzo2o.market.model.dto.response.CouponPageInfoResDTO;
import com.jzo2o.market.model.dto.response.CouponSimpleInfoResDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 * @author itcast
 * @since 2023-09-16
 */
public interface ICouponService extends IService<Coupon> {
    /**
     * 分页查询优惠卷信息(通过活动id)
     */
    PageResult<CouponPageInfoResDTO> page(CouponPageQueryDTO couponPageQueryDTO);

    /**
     * 用户端滚动查询(抢卷时间降序)
     */
    List<CouponSimpleInfoResDTO> getCurrentUserCoupon(CouponStatusEnum status, Integer lastId);

    /**
     * 更新过期优惠卷的状态为失效中
     */
    void invalidExpiredCoupon();

    /**
     * 同步优惠卷数据到数据库中
     */
    void syncCouponRecord(long activityId, long userId);

    /**
     * 根据订单金额获取当前用户可用优惠卷
     */
    List<AvailableCouponsResDTO> getAvailableCoupon(BigDecimal totalAmount);

    /**
     * 计算优惠卷的优惠价格
     * @param coupon      优惠卷信息
     * @param totalAmount 订单总金额
     */
    BigDecimal calcDiscountAmount(Coupon coupon, BigDecimal totalAmount);
}